package com.zyh.em.update;

import com.zyh.em.entity.HistoryData;
import com.zyh.em.entity.LoginSuccessData;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 更新链
 */
public class UpdateChain {

    private List<AbstractUpdate> list = new ArrayList<>();//所有的更新因子

    private int position;//标记更新链执行到了哪个位置
    
    public void addUpdates(AbstractUpdate... updates){
        if (updates != null){
            Collections.addAll(list,updates);
        }
    }

    /**
     * 驱动链条中的责任：执行链条中的下一个责任（更新因子）
     * @param loginSuccessData
     * @param historyData
     */
    public void doUpdate(LoginSuccessData loginSuccessData, HistoryData historyData){
        if(position<list.size()){
            AbstractUpdate abstractUpdate = list.get(position);
            position++;
            abstractUpdate.update(loginSuccessData,historyData,this);
        }
    }
}